package es.efor.ics.gev.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * The persistent class for the <b>ASIGNATURAS</b> database table.
 * 
 */
@Entity
@Table(name = "ASIGNATURAS")
public class Asignaturas extends BaseObject implements Serializable {

	// private static data
	private static final long serialVersionUID = 6115161310775052033L;

	// private instance data
	private Long id;
	private String nombre;
	private Integer duraccion;
	private Date fecha_Inicio;
	private Date fecha_Fin;
	
	/**
	 * Construct an uninitialized <code>Asignaturas</code> (for runtime proxy
	 * generation in Hibernate).
	 */
	
	protected Asignaturas() {
	}

	/**
	 * Construct an initialized <code>Asignaturas</code>.
	 */
	public Asignaturas(String nombre,Integer duraccion,Date fecha_Inicio,Date fecha_Fin) {
		this.nombre = nombre;
		this.duraccion = duraccion;
		this.fecha_Inicio = fecha_Inicio;
		this.fecha_Fin = fecha_Fin;
	}
	// ********************** Accessor Methods ********************** //

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "ASIGNATURAS_ID")
	public Long getId() {
		return this.id;
	}

	public void setId(Long accionId) {
		this.id = accionId;
	}

	// Not nullable
	@Column(name = "NOMBRE", nullable = false, length = 255)
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	@Column(name = "DURACCION")
	public Integer getDuraccion() {
		return duraccion;
	}

	public void setDuraccion(Integer duraccion) {
		this.duraccion = duraccion;
	}
	
	@Column(name = "FECHA_INICIO")
	public Date getFecha_Inicio() {
		return fecha_Inicio;
	}

	public void setFecha_Inicio(Date fecha_Inicio) {
		this.fecha_Inicio = fecha_Inicio;
	}
	
	@Column(name = "FECHA_FIN")
	public Date getFecha_Fin() {
		return fecha_Fin;
	}

	public void setFecha_Fin(Date fecha_Fin) {
		this.fecha_Fin = fecha_Fin;
	}


	// ********************** Common Methods ********************** //

	@Override
	public int hashCode() {
		return new HashCodeBuilder(17, 37).append(this.getNombre())
				.toHashCode();
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Accion == false) {
			return false;
		}
		if (this == obj) {
			return true;
		}
		Accion rhs = (Accion) obj;
		return new EqualsBuilder().append(this.getNombre(),
				rhs.getNombreAccion()).isEquals();
	}

	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append(
				"nombreAccion", this.getNombre()).toString();
	}

}
